bitmask: Split bitmask code into two
authorBenjamin Otte <otte@redhat.com>
Thu, 9 Feb 2012 00:44:59 +0000 (01:44 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 1 Mar 2012 14:10:36 +0000 (15:10 +0100)
This does nothing but turn all GtkBitmask functions into static inline
functions that call the gtk_allocated_bitmask_*() equivalent.

The implementation of the static functions has also been put into a
private header, to not scare people who want to see how things are
implemented.

gtk/Makefile.am
gtk/gtkallocatedbitmask.c [new file with mode: 0644]
gtk/gtkallocatedbitmaskprivate.h [new file with mode: 0644]
gtk/gtkbitmask.c [deleted file]
gtk/gtkbitmaskprivate.h
gtk/gtkbitmaskprivateimpl.h [new file with mode: 0644]
gtk/tests/Makefile.am

index da4a4caa83c51bc1a9fe365d8527845831935a61..75ab96d195299fab257f7e0be38d6dda7bec02c6 100644 (file)
@@ -403,12 +403,14 @@ gtk_private_h_sources =           \
        gtkapplicationprivate.h \
        gtkaccelgroupprivate.h  \
        gtkaccelmapprivate.h    \
+       gtkallocatedbitmaskprivate.h    \
        gtkanimationdescription.h \
        gtkappchooserprivate.h  \
        gtkappchoosermodule.h   \
        gtkappchooseronline.h   \
        gtkbindingsprivate.h    \
        gtkbitmaskprivate.h     \
+       gtkbitmaskprivateimpl.h \
        gtkborderimageprivate.h \
        gtkboxprivate.h         \
        gtkbuilderprivate.h     \
@@ -558,6 +560,7 @@ gtk_base_c_sources =                \
        gtkactivatable.c        \
        gtkadjustment.c         \
        gtkalignment.c          \
+       gtkallocatedbitmask.c   \
        gtkappchooser.c         \
        gtkappchooserwidget.c   \
        gtkappchooserbutton.c   \
@@ -573,7 +576,6 @@ gtk_base_c_sources =                \
        gtkbbox.c               \
        gtkbin.c                \
        gtkbindings.c           \
-       gtkbitmask.c            \
        gtkborder.c             \
        gtkborderimage.c        \
        gtkbox.c                \
diff --git a/gtk/gtkallocatedbitmask.c b/gtk/gtkallocatedbitmask.c
new file mode 100644 (file)
index 0000000..ef2ce9f
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+ * Copyright © 2011 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ */
+
+#include <config.h>
+
+#include "gtk/gtkallocatedbitmaskprivate.h"
+
+#define VALUE_TYPE gsize
+
+#define VALUE_SIZE_BITS (sizeof (VALUE_TYPE) * 8)
+#define VALUE_BIT(idx) (((VALUE_TYPE) 1) << (idx))
+
+struct _GtkBitmask {
+  gsize len;
+  VALUE_TYPE data[1];
+};
+
+static GtkBitmask *
+gtk_allocated_bitmask_resize (GtkBitmask *mask,
+                              gsize       size) G_GNUC_WARN_UNUSED_RESULT;
+static GtkBitmask *
+gtk_allocated_bitmask_resize (GtkBitmask *mask,
+                              gsize       size)
+{
+  gsize i;
+
+  mask = g_realloc (mask, sizeof (GtkBitmask) + sizeof(VALUE_TYPE) * (MAX (size, 1) - 1));
+
+  for (i = mask->len; i < size; i++)
+    mask->data[i] = 0;
+
+  mask->len = size;
+
+  return mask;
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_new (void)
+{
+  return g_malloc0 (sizeof (GtkBitmask));
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_copy (const GtkBitmask *mask)
+{
+  GtkBitmask *copy;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+
+  copy = _gtk_allocated_bitmask_new ();
+  
+  return _gtk_allocated_bitmask_union (copy, mask);
+}
+
+void
+_gtk_allocated_bitmask_free (GtkBitmask *mask)
+{
+  g_return_if_fail (mask != NULL);
+
+  g_free (mask);
+}
+
+void
+_gtk_allocated_bitmask_print (const GtkBitmask *mask,
+                              GString          *string)
+{
+  int i;
+
+  g_return_if_fail (mask != NULL);
+  g_return_if_fail (string != NULL);
+
+  for (i = mask->len * VALUE_SIZE_BITS - 1; i >= 0; i--)
+    {
+      if (_gtk_allocated_bitmask_get (mask, i))
+        break;
+    }
+
+  if (i < 0)
+    {
+      g_string_append_c (string, '0');
+      return;
+    }
+
+  for (; i >= 0; i--)
+    {
+      g_string_append_c (string, _gtk_allocated_bitmask_get (mask, i) ? '1' : '0');
+    }
+}
+
+char *
+_gtk_allocated_bitmask_to_string (const GtkBitmask *mask)
+{
+  GString *string;
+  
+  string = g_string_new (NULL);
+  _gtk_allocated_bitmask_print (mask, string);
+  return g_string_free (string, FALSE);
+}
+
+/* NB: Call this function whenever the
+ * array might have become too large.
+ * _gtk_allocated_bitmask_is_empty() depends on this.
+ */
+static GtkBitmask *
+gtk_allocated_bitmask_shrink (GtkBitmask *mask) G_GNUC_WARN_UNUSED_RESULT;
+static GtkBitmask *
+gtk_allocated_bitmask_shrink (GtkBitmask *mask)
+{
+  guint i;
+
+  for (i = mask->len; i; i--)
+    {
+      if (mask->data[i - 1])
+        break;
+    }
+
+  return gtk_allocated_bitmask_resize (mask, i);
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_intersect (GtkBitmask       *mask,
+                                  const GtkBitmask *other)
+{
+  guint i;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+  g_return_val_if_fail (other != NULL, NULL);
+
+  mask = gtk_allocated_bitmask_resize (mask, MIN (mask->len, other->len));
+  for (i = 0; i < mask->len; i++)
+    {
+      mask->data[i] &= other->data[i];
+    }
+
+  return gtk_allocated_bitmask_shrink (mask);
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_union (GtkBitmask       *mask,
+                              const GtkBitmask *other)
+{
+  guint i;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+  g_return_val_if_fail (other != NULL, NULL);
+
+  mask = gtk_allocated_bitmask_resize (mask, MAX (mask->len, other->len));
+  for (i = 0; i < other->len; i++)
+    {
+      mask->data[i] |= other->data[i];
+    }
+
+  return mask;
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_subtract (GtkBitmask       *mask,
+                                 const GtkBitmask *other)
+{
+  guint i;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+  g_return_val_if_fail (other != NULL, NULL);
+
+  for (i = 0; i < other->len; i++)
+    {
+      mask->data[i] |= ~other->data[i];
+    }
+
+  return gtk_allocated_bitmask_shrink (mask);
+}
+
+static void
+gtk_allocated_bitmask_indexes (guint index_,
+                               guint *array_index,
+                               guint *bit_index)
+{
+  *array_index = index_ / VALUE_SIZE_BITS;
+  *bit_index = index_ % VALUE_SIZE_BITS;
+}
+
+gboolean
+_gtk_allocated_bitmask_get (const GtkBitmask *mask,
+                            guint             index_)
+{
+  guint array_index, bit_index;
+
+  g_return_val_if_fail (mask != NULL, FALSE);
+
+  gtk_allocated_bitmask_indexes (index_, &array_index, &bit_index);
+
+  if (array_index >= mask->len)
+    return FALSE;
+
+  return (mask->data[array_index] & VALUE_BIT (bit_index)) ? TRUE : FALSE;
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_set (GtkBitmask *mask,
+                            guint       index_,
+                            gboolean    value)
+{
+  guint array_index, bit_index;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+
+  gtk_allocated_bitmask_indexes (index_, &array_index, &bit_index);
+
+  if (value)
+    {
+      if (array_index >= mask->len)
+        mask = gtk_allocated_bitmask_resize (mask, array_index + 1);
+      
+      mask->data[array_index] |= VALUE_BIT (bit_index);
+    }
+  else
+    {
+      if (array_index < mask->len)
+        {
+          mask->data[array_index] &= ~ VALUE_BIT (bit_index);
+          mask = gtk_allocated_bitmask_shrink (mask);
+        }
+    }
+
+  return mask;
+}
+
+GtkBitmask *
+_gtk_allocated_bitmask_invert_range (GtkBitmask *mask,
+                                     guint       start,
+                                     guint       end)
+{
+  guint i;
+
+  g_return_val_if_fail (mask != NULL, NULL);
+  g_return_val_if_fail (start < end, NULL);
+
+  /* I CAN HAS SPEEDUP? */
+
+  for (i = start; i < end; i++)
+    mask = _gtk_allocated_bitmask_set (mask, i, !_gtk_allocated_bitmask_get (mask, i));
+
+  return mask;
+}
+
+gboolean
+_gtk_allocated_bitmask_is_empty (const GtkBitmask *mask)
+{
+  g_return_val_if_fail (mask != NULL, FALSE);
+
+  return mask->len == 0;
+}
+
+gboolean
+_gtk_allocated_bitmask_equals (const GtkBitmask  *mask,
+                               const GtkBitmask  *other)
+{
+  guint i;
+
+  g_return_val_if_fail (mask != NULL, FALSE);
+  g_return_val_if_fail (other != NULL, FALSE);
+
+  if (mask->len != other->len)
+    return FALSE;
+
+  for (i = 0; i < mask->len; i++)
+    {
+      if (mask->data[i] != other->data[i])
+        return FALSE;
+    }
+
+  return TRUE;
+}
+
+gboolean
+_gtk_allocated_bitmask_intersects (const GtkBitmask *mask,
+                                   const GtkBitmask *other)
+{
+  int i;
+
+  g_return_val_if_fail (mask != NULL, FALSE);
+  g_return_val_if_fail (other != NULL, FALSE);
+
+  for (i = MIN (mask->len, other->len) - 1; i >= 0; i--)
+    {
+      if (mask->data[i] & other->data[i])
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
diff --git a/gtk/gtkallocatedbitmaskprivate.h b/gtk/gtkallocatedbitmaskprivate.h
new file mode 100644 (file)
index 0000000..023b70d
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2011 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ */
+
+#ifndef __GTK_ALLOCATED_BITMASK_PRIVATE_H__
+#define __GTK_ALLOCATED_BITMASK_PRIVATE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GtkBitmask GtkBitmask;
+
+
+GtkBitmask *   _gtk_allocated_bitmask_new               (void);
+GtkBitmask *   _gtk_allocated_bitmask_copy              (const GtkBitmask  *mask);
+void           _gtk_allocated_bitmask_free              (GtkBitmask        *mask);
+
+char *         _gtk_allocated_bitmask_to_string         (const GtkBitmask  *mask);
+void           _gtk_allocated_bitmask_print             (const GtkBitmask  *mask,
+                                                         GString           *string);
+
+GtkBitmask *   _gtk_allocated_bitmask_intersect         (GtkBitmask        *mask,
+                                                         const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+GtkBitmask *   _gtk_allocated_bitmask_union             (GtkBitmask        *mask,
+                                                         const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+GtkBitmask *   _gtk_allocated_bitmask_subtract          (GtkBitmask        *mask,
+                                                         const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+
+gboolean       _gtk_allocated_bitmask_get               (const GtkBitmask  *mask,
+                                                         guint              index_);
+GtkBitmask *   _gtk_allocated_bitmask_set               (GtkBitmask        *mask,
+                                                         guint              index_,
+                                                         gboolean           value) G_GNUC_WARN_UNUSED_RESULT;
+
+GtkBitmask *   _gtk_allocated_bitmask_invert_range      (GtkBitmask        *mask,
+                                                         guint              start,
+                                                         guint              end) G_GNUC_WARN_UNUSED_RESULT;
+
+gboolean       _gtk_allocated_bitmask_is_empty          (const GtkBitmask  *mask);
+gboolean       _gtk_allocated_bitmask_equals            (const GtkBitmask  *mask,
+                                                         const GtkBitmask  *other);
+gboolean       _gtk_allocated_bitmask_intersects        (const GtkBitmask  *mask,
+                                                         const GtkBitmask  *other);
+
+G_END_DECLS
+
+#endif /* __GTK_ALLOCATED_BITMASK_PRIVATE_H__ */
diff --git a/gtk/gtkbitmask.c b/gtk/gtkbitmask.c
deleted file mode 100644 (file)
index 6e47bb2..0000000
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright © 2011 Red Hat Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Benjamin Otte <otte@gnome.org>
- */
-
-#include <config.h>
-
-#include "gtk/gtkbitmaskprivate.h"
-
-#define VALUE_TYPE gsize
-
-#define VALUE_SIZE_BITS (sizeof (VALUE_TYPE) * 8)
-#define VALUE_BIT(idx) (((VALUE_TYPE) 1) << (idx))
-
-struct _GtkBitmask {
-  gsize len;
-  VALUE_TYPE data[1];
-};
-
-static GtkBitmask *
-gtk_bitmask_resize (GtkBitmask *mask,
-                    gsize       size) G_GNUC_WARN_UNUSED_RESULT;
-static GtkBitmask *
-gtk_bitmask_resize (GtkBitmask *mask,
-                    gsize       size)
-{
-  gsize i;
-
-  mask = g_realloc (mask, sizeof (GtkBitmask) + sizeof(VALUE_TYPE) * (MAX (size, 1) - 1));
-
-  for (i = mask->len; i < size; i++)
-    mask->data[i] = 0;
-
-  mask->len = size;
-
-  return mask;
-}
-
-GtkBitmask *
-_gtk_bitmask_new (void)
-{
-  return g_malloc0 (sizeof (GtkBitmask));
-}
-
-GtkBitmask *
-_gtk_bitmask_copy (const GtkBitmask *mask)
-{
-  GtkBitmask *copy;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-
-  copy = _gtk_bitmask_new ();
-  
-  return _gtk_bitmask_union (copy, mask);
-}
-
-void
-_gtk_bitmask_free (GtkBitmask *mask)
-{
-  g_return_if_fail (mask != NULL);
-
-  g_free (mask);
-}
-
-void
-_gtk_bitmask_print (const GtkBitmask *mask,
-                    GString          *string)
-{
-  int i;
-
-  g_return_if_fail (mask != NULL);
-  g_return_if_fail (string != NULL);
-
-  for (i = mask->len * VALUE_SIZE_BITS - 1; i >= 0; i--)
-    {
-      if (_gtk_bitmask_get (mask, i))
-        break;
-    }
-
-  if (i < 0)
-    {
-      g_string_append_c (string, '0');
-      return;
-    }
-
-  for (; i >= 0; i--)
-    {
-      g_string_append_c (string, _gtk_bitmask_get (mask, i) ? '1' : '0');
-    }
-}
-
-char *
-_gtk_bitmask_to_string (const GtkBitmask *mask)
-{
-  GString *string;
-  
-  string = g_string_new (NULL);
-  _gtk_bitmask_print (mask, string);
-  return g_string_free (string, FALSE);
-}
-
-/* NB: Call this function whenever the
- * array might have become too large.
- * _gtk_bitmask_is_empty() depends on this.
- */
-static GtkBitmask *
-gtk_bitmask_shrink (GtkBitmask *mask) G_GNUC_WARN_UNUSED_RESULT;
-static GtkBitmask *
-gtk_bitmask_shrink (GtkBitmask *mask)
-{
-  guint i;
-
-  for (i = mask->len; i; i--)
-    {
-      if (mask->data[i - 1])
-        break;
-    }
-
-  return gtk_bitmask_resize (mask, i);
-}
-
-GtkBitmask *
-_gtk_bitmask_intersect (GtkBitmask       *mask,
-                        const GtkBitmask *other)
-{
-  guint i;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-  g_return_val_if_fail (other != NULL, NULL);
-
-  mask = gtk_bitmask_resize (mask, MIN (mask->len, other->len));
-  for (i = 0; i < mask->len; i++)
-    {
-      mask->data[i] &= other->data[i];
-    }
-
-  return gtk_bitmask_shrink (mask);
-}
-
-GtkBitmask *
-_gtk_bitmask_union (GtkBitmask       *mask,
-                    const GtkBitmask *other)
-{
-  guint i;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-  g_return_val_if_fail (other != NULL, NULL);
-
-  mask = gtk_bitmask_resize (mask, MAX (mask->len, other->len));
-  for (i = 0; i < other->len; i++)
-    {
-      mask->data[i] |= other->data[i];
-    }
-
-  return mask;
-}
-
-GtkBitmask *
-_gtk_bitmask_subtract (GtkBitmask       *mask,
-                       const GtkBitmask *other)
-{
-  guint i;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-  g_return_val_if_fail (other != NULL, NULL);
-
-  for (i = 0; i < other->len; i++)
-    {
-      mask->data[i] |= ~other->data[i];
-    }
-
-  return gtk_bitmask_shrink (mask);
-}
-
-static void
-gtk_bitmask_indexes (guint index_,
-                     guint *array_index,
-                     guint *bit_index)
-{
-  *array_index = index_ / VALUE_SIZE_BITS;
-  *bit_index = index_ % VALUE_SIZE_BITS;
-}
-
-gboolean
-_gtk_bitmask_get (const GtkBitmask *mask,
-                  guint             index_)
-{
-  guint array_index, bit_index;
-
-  g_return_val_if_fail (mask != NULL, FALSE);
-
-  gtk_bitmask_indexes (index_, &array_index, &bit_index);
-
-  if (array_index >= mask->len)
-    return FALSE;
-
-  return (mask->data[array_index] & VALUE_BIT (bit_index)) ? TRUE : FALSE;
-}
-
-GtkBitmask *
-_gtk_bitmask_set (GtkBitmask *mask,
-                  guint       index_,
-                  gboolean    value)
-{
-  guint array_index, bit_index;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-
-  gtk_bitmask_indexes (index_, &array_index, &bit_index);
-
-  if (value)
-    {
-      if (array_index >= mask->len)
-        mask = gtk_bitmask_resize (mask, array_index + 1);
-      
-      mask->data[array_index] |= VALUE_BIT (bit_index);
-    }
-  else
-    {
-      if (array_index < mask->len)
-        {
-          mask->data[array_index] &= ~ VALUE_BIT (bit_index);
-          mask = gtk_bitmask_shrink (mask);
-        }
-    }
-
-  return mask;
-}
-
-GtkBitmask *
-_gtk_bitmask_invert_range (GtkBitmask *mask,
-                           guint       start,
-                           guint       end)
-{
-  guint i;
-
-  g_return_val_if_fail (mask != NULL, NULL);
-  g_return_val_if_fail (start < end, NULL);
-
-  /* I CAN HAS SPEEDUP? */
-
-  for (i = start; i < end; i++)
-    mask = _gtk_bitmask_set (mask, i, !_gtk_bitmask_get (mask, i));
-
-  return mask;
-}
-
-gboolean
-_gtk_bitmask_is_empty (const GtkBitmask *mask)
-{
-  g_return_val_if_fail (mask != NULL, FALSE);
-
-  return mask->len == 0;
-}
-
-gboolean
-_gtk_bitmask_equals (const GtkBitmask  *mask,
-                     const GtkBitmask  *other)
-{
-  guint i;
-
-  g_return_val_if_fail (mask != NULL, FALSE);
-  g_return_val_if_fail (other != NULL, FALSE);
-
-  if (mask->len != other->len)
-    return FALSE;
-
-  for (i = 0; i < mask->len; i++)
-    {
-      if (mask->data[i] != other->data[i])
-        return FALSE;
-    }
-
-  return TRUE;
-}
-
-gboolean
-_gtk_bitmask_intersects (const GtkBitmask *mask,
-                         const GtkBitmask *other)
-{
-  int i;
-
-  g_return_val_if_fail (mask != NULL, FALSE);
-  g_return_val_if_fail (other != NULL, FALSE);
-
-  for (i = MIN (mask->len, other->len) - 1; i >= 0; i--)
-    {
-      if (mask->data[i] & other->data[i])
-        return TRUE;
-    }
-
-  return FALSE;
-}
-
index 7fad1f2ce7ac2949d1a39c1c5e27ad21367d7966..5e61c3c70c9f7f52ddc50e9c9de3c712524cdb65 100644 (file)
@@ -27,36 +27,44 @@ G_BEGIN_DECLS
 typedef struct _GtkBitmask           GtkBitmask;
 
 
-GtkBitmask *   _gtk_bitmask_new                  (void);
-GtkBitmask *   _gtk_bitmask_copy                 (const GtkBitmask  *mask);
-void           _gtk_bitmask_free                 (GtkBitmask        *mask);
-
-char *         _gtk_bitmask_to_string            (const GtkBitmask  *mask);
-void           _gtk_bitmask_print                (const GtkBitmask  *mask,
-                                                  GString           *string);
-
-GtkBitmask *   _gtk_bitmask_intersect            (GtkBitmask        *mask,
-                                                  const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
-GtkBitmask *   _gtk_bitmask_union                (GtkBitmask        *mask,
-                                                  const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
-GtkBitmask *   _gtk_bitmask_subtract             (GtkBitmask        *mask,
-                                                  const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
-
-gboolean       _gtk_bitmask_get                  (const GtkBitmask  *mask,
-                                                  guint              index_);
-GtkBitmask *   _gtk_bitmask_set                  (GtkBitmask        *mask,
-                                                  guint              index_,
-                                                  gboolean           value) G_GNUC_WARN_UNUSED_RESULT;
-
-GtkBitmask *   _gtk_bitmask_invert_range         (GtkBitmask        *mask,
-                                                  guint              start,
-                                                  guint              end) G_GNUC_WARN_UNUSED_RESULT;
-
-gboolean       _gtk_bitmask_is_empty             (const GtkBitmask  *mask);
-gboolean       _gtk_bitmask_equals               (const GtkBitmask  *mask,
-                                                  const GtkBitmask  *other);
-gboolean       _gtk_bitmask_intersects           (const GtkBitmask  *mask,
-                                                  const GtkBitmask  *other);
+static inline GtkBitmask *      _gtk_bitmask_new                  (void);
+static inline GtkBitmask *      _gtk_bitmask_copy                 (const GtkBitmask  *mask);
+static inline void              _gtk_bitmask_free                 (GtkBitmask        *mask);
+
+static inline char *            _gtk_bitmask_to_string            (const GtkBitmask  *mask);
+static inline void              _gtk_bitmask_print                (const GtkBitmask  *mask,
+                                                                   GString           *string);
+
+static inline GtkBitmask *      _gtk_bitmask_intersect            (GtkBitmask        *mask,
+                                                                   const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+static inline GtkBitmask *      _gtk_bitmask_union                (GtkBitmask        *mask,
+                                                                   const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+static inline GtkBitmask *      _gtk_bitmask_subtract             (GtkBitmask        *mask,
+                                                                   const GtkBitmask  *other) G_GNUC_WARN_UNUSED_RESULT;
+
+static inline gboolean          _gtk_bitmask_get                  (const GtkBitmask  *mask,
+                                                                   guint              index_);
+static inline GtkBitmask *      _gtk_bitmask_set                  (GtkBitmask        *mask,
+                                                                   guint              index_,
+                                                                   gboolean           value) G_GNUC_WARN_UNUSED_RESULT;
+
+static inline GtkBitmask *      _gtk_bitmask_invert_range         (GtkBitmask        *mask,
+                                                                   guint              start,
+                                                                   guint              end) G_GNUC_WARN_UNUSED_RESULT;
+
+static inline gboolean          _gtk_bitmask_is_empty             (const GtkBitmask  *mask);
+static inline gboolean          _gtk_bitmask_equals               (const GtkBitmask  *mask,
+                                                                   const GtkBitmask  *other);
+static inline gboolean          _gtk_bitmask_intersects           (const GtkBitmask  *mask,
+                                                                   const GtkBitmask  *other);
+
+
+/* This is the actual implementation of the functions declared above.
+ * We put it in a separate file so people don't get scared from looking at this
+ * file when reading source code.
+ */
+#include "gtkbitmaskprivateimpl.h"
+
 
 G_END_DECLS
 
diff --git a/gtk/gtkbitmaskprivateimpl.h b/gtk/gtkbitmaskprivateimpl.h
new file mode 100644 (file)
index 0000000..365d438
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright © 2011 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ */
+
+#include "gtkallocatedbitmaskprivate.h"
+
+static inline GtkBitmask *
+_gtk_bitmask_new (void)
+{
+  return _gtk_allocated_bitmask_new ();
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_copy (const GtkBitmask *mask)
+{
+  return _gtk_allocated_bitmask_copy (mask);
+}
+
+static inline void
+_gtk_bitmask_free (GtkBitmask *mask)
+{
+  return _gtk_allocated_bitmask_free (mask);
+}
+
+static inline char *
+_gtk_bitmask_to_string (const GtkBitmask *mask)
+{
+  return _gtk_allocated_bitmask_to_string (mask);
+}
+
+static inline void
+_gtk_bitmask_print (const GtkBitmask *mask,
+                    GString          *string)
+{
+  return _gtk_allocated_bitmask_print (mask, string);
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_intersect (GtkBitmask       *mask,
+                        const GtkBitmask *other)
+{
+  return _gtk_allocated_bitmask_intersect (mask, other);
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_union (GtkBitmask       *mask,
+                    const GtkBitmask *other)
+{
+  return _gtk_allocated_bitmask_union (mask, other);
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_subtract (GtkBitmask       *mask,
+                       const GtkBitmask *other)
+{
+  return _gtk_allocated_bitmask_subtract (mask, other);
+}
+
+static inline gboolean
+_gtk_bitmask_get (const GtkBitmask *mask,
+                  guint             index_)
+{
+  return _gtk_allocated_bitmask_get (mask, index_);
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_set (GtkBitmask *mask,
+                  guint       index_,
+                  gboolean    value)
+{
+  return _gtk_allocated_bitmask_set (mask, index_, value);
+}
+
+static inline GtkBitmask *
+_gtk_bitmask_invert_range (GtkBitmask *mask,
+                           guint       start,
+                           guint       end)
+{
+  return _gtk_allocated_bitmask_invert_range (mask, start, end);
+}
+
+static inline gboolean
+_gtk_bitmask_is_empty (const GtkBitmask *mask)
+{
+  return _gtk_allocated_bitmask_is_empty (mask);
+}
+
+static inline gboolean
+_gtk_bitmask_equals (const GtkBitmask *mask,
+                     const GtkBitmask *other)
+{
+  return _gtk_allocated_bitmask_equals (mask, other);
+}
+
+static inline gboolean
+_gtk_bitmask_intersects (const GtkBitmask *mask,
+                         const GtkBitmask *other)
+{
+  return _gtk_allocated_bitmask_intersects (mask, other);
+}
index f02387f9b87143381aedece7b4555130f30edefe..b8ef3146b806590f88f8d0d8e8a45e111bf49cb3 100644 (file)
@@ -136,7 +136,10 @@ rbtree_LDADD                        = $(GTK_DEP_LIBS)
 
 TEST_PROGS                     += bitmask
 bitmask_CFLAGS                  = -DGTK_COMPILATION -UG_ENABLE_DEBUG
-bitmask_SOURCES                         = bitmask.c ../gtkbitmaskprivate.h ../gtkbitmask.c
+bitmask_SOURCES                         = bitmask.c \
+                                  ../gtkbitmaskprivate.h \
+                                  ../gtkallocatedbitmaskprivate.h \
+                                  ../gtkallocatedbitmask.c
 bitmask_LDADD                   = $(GTK_DEP_LIBS)
 
 TEST_PROGS                     += regression-tests